#ifndef VIEW_H
#define VIEW_H

#include "Troll3D_global.h"

#include "Entity.h"
#include "Transform.h"

enum TROLL3DSHARED_EXPORT ProjectionMode{
    ORTHO,
    PERSPECTIVE
};

class TROLL3DSHARED_EXPORT View : public Entity{

    /**************************************
     *          Public
     **************************************/
    public :

        /**************************************
         *          Constructors
         **************************************/

            View();
            View(ProjectionMode);

            void Initialize(ProjectionMode mode);

        /**************************************
         *          Methods
         **************************************/

            /**************************************
             *          Get
             **************************************/

                Transform&  GetTransform();

                Matrix4&    ViewMatrix();

                Matrix4&    ProjectionMatrix();

            /**************************************
             *          Set
             **************************************/

                void SetTransform(Transform & transform);
                void SetTransform(Transform * transform);

                void ViewMatrix(Matrix4 & matrix);
                void ViewMatrix(Matrix4 * matrix);

                void ProjectionMatrix(Matrix4 & matrix);
                void ProjectionMatrix(Matrix4 * matrix);

            /**************************************
             *          Virtual
             **************************************/

                void Display();

        /**************************************
         *          Properties
         **************************************/

    /**************************************
     *          Private
     **************************************/
    private :

        /**************************************
         *          Methods
         **************************************/

        /**************************************
         *          Properties
         **************************************/

            Transform*      m_Transform;
            Matrix4*        m_ViewMatrix;
            Matrix4*        m_ProjectionMatrix;

            ProjectionMode  m_Mode;





};

#endif //VIEW_H
